import express from 'express';
import db from '../database.js';
import { verifySession } from '../utils/auth.js';

const router = express.Router();

// 认证中间件
const requireAuth = (req, res, next) => {
  const token = req.headers.authorization?.replace('Bearer ', '');

  if (!token || !verifySession(token)) {
    return res.status(401).json({ error: '未授权，请先登录' });
  }

  next();
};

// 获取工作区默认设置
router.get('/workspace-defaults', (req, res) => {
  try {
    const setting = db.prepare(`
      SELECT setting_value
      FROM settings
      WHERE setting_key = ?
    `).get('workspace_defaults');

    if (!setting) {
      // 如果没有设置，返回默认值
      return res.json({
        commonColors: ['#FF0000', '#00FF00', '#0000FF'],
        shadowColor: 'rgba(128, 128, 128, 0.15)',
        defaultFontSizes: {
          lineLabel: 16,
          areaLabel: 18,
          pointLabel: 16
        }
      });
    }

    res.json(JSON.parse(setting.setting_value));
  } catch (error) {
    console.error('获取设置失败:', error);
    res.status(500).json({ error: '获取设置失败' });
  }
});

// 更新工作区默认设置（需要管理员权限）
router.put('/workspace-defaults', requireAuth, (req, res) => {
  try {
    const { commonColors, shadowColor, defaultFontSizes } = req.body;

    // 验证数据
    if (!commonColors || !defaultFontSizes) {
      return res.status(400).json({ error: '缺少必要的设置数据' });
    }

    // 验证常用色数组
    if (!Array.isArray(commonColors) || commonColors.length !== 3) {
      return res.status(400).json({ error: '常用色必须是包含3个颜色的数组' });
    }

    // 验证颜色格式
    const colorRegex = /^#[0-9A-Fa-f]{6}$/;
    for (const color of commonColors) {
      if (!colorRegex.test(color)) {
        return res.status(400).json({ error: '颜色格式不正确，应为 #RRGGBB 格式' });
      }
    }

    // 验证字号范围
    if (defaultFontSizes.lineLabel < 8 || defaultFontSizes.lineLabel > 72 ||
        defaultFontSizes.areaLabel < 8 || defaultFontSizes.areaLabel > 72 ||
        defaultFontSizes.pointLabel < 8 || defaultFontSizes.pointLabel > 72) {
      return res.status(400).json({ error: '字号必须在 8-72 之间' });
    }

    const settingValue = JSON.stringify({
      commonColors,
      shadowColor: shadowColor || 'rgba(128, 128, 128, 0.15)',
      defaultFontSizes
    });

    // 更新或插入设置
    const existing = db.prepare(`
      SELECT id FROM settings WHERE setting_key = ?
    `).get('workspace_defaults');

    if (existing) {
      db.prepare(`
        UPDATE settings
        SET setting_value = ?, updated_at = CURRENT_TIMESTAMP
        WHERE setting_key = ?
      `).run(settingValue, 'workspace_defaults');
    } else {
      db.prepare(`
        INSERT INTO settings (setting_key, setting_value)
        VALUES (?, ?)
      `).run('workspace_defaults', settingValue);
    }

    res.json({
      message: '设置已更新',
      data: JSON.parse(settingValue)
    });
  } catch (error) {
    console.error('更新设置失败:', error);
    res.status(500).json({ error: '更新设置失败' });
  }
});

export default router;

